package org.nick.abe;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class Main {
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
if (args.length < 3) {
usage();
System.exit(1);
}
String mode = args[0];
if (!"pack".equals(mode) && !"unpack".equals(mode) && !"pack-kk".equals(mode)) {
usage();
System.exit(1);
}
boolean unpack = "unpack".equals(mode);
String backupFilename = unpack ? args[1] : args[2];
String tarFilename = unpack ? args[2] : args[1];
String password = null;
if (args.length > 3) {
password = args[3];
}
if (password == null) {
/* if password is not given, try to read it from environment */
password = System.getenv("ABE_PASSWD");
}
if (unpack) {
AndroidBackup.extractAsTar(backupFilename, tarFilename, password);
} else {
boolean isKitKat = "pack-kk".equals(mode);
AndroidBackup.packTar(tarFilename, backupFilename, password, isKitKat);
}
}
private static void usage() {
System.out.println("Usage:");
System.out
.println(" unpack:\tabe unpack\t<backup.ab> <backup.tar> [password]");
System.out
.println(" pack:\t\tabe pack\t<backup.tar> <backup.ab> [password]");
System.out
.println(" pack for 4.4:\tabe pack-kk\t<backup.tar> <backup.ab> [password]");
System.out
.println("If the filename is `-`, then data is read from standard input");
System.out
.println("or written to standard output.");
System.out
.println("Envvar ABE_PASSWD is tried when password is not given");
}
}